var net = require('net');
var fs = require('fs');//引入文件读取模块
var crypto = require('crypto');
 
var filePathRoot = './Files';

var HOST = '127.0.0.1';
var PORT = 9999;

// 创建一个TCP服务器实例，调用listen函数开始监听指定端口
// 传入net.createServer()的回调函数将作为”connection“事件的处理函数
// 在每一个“connection”事件中，该回调函数接收到的socket对象是唯一的
net.createServer(function(sock) {

    // 我们获得一个连接 - 该连接自动关联一个socket对象
    console.log('CONNECTED: ' +
        sock.remoteAddress + ':' + sock.remotePort);

    //该游戏服务器实现的唯一接口就是根据客户端传入的平台字符串，传回相应平台的最新资源目录文件的MD5值，客户端根据这个来判断当前是否需要进行热更新
    sock.on("data",function(data){
        console.log("current client request platform is: " + data);
        var filePath = filePathRoot + "/" + data + "/ResourceMap";
        if(fs.existsSync(filePath)){
            var rs = fs.createReadStream(filePath);

            var hash = crypto.createHash('md5');
            rs.on('data', hash.update.bind(hash));

            rs.on('end', function () {
                sock.write(hash.digest('hex'));
            });
        }else{
            sock.write("no file");
        }
    });

    // 为这个socket实例添加一个"close"事件处理函数
    sock.on('close', function(data) {
        console.log('CLOSED: ' +
            sock.remoteAddress + ' ' + sock.remotePort);
    });

}).listen(PORT, HOST);

console.log('Server listening on ' + HOST +':'+ PORT);